/*
 * @Author: GL
 * @Date: 2022-09-18 18:06:44
 * @LastEditors: GL
 * @LastEditTime: 2023-02-02 21:41:00
 * @Description: 用户信息验证模块
 */
const joi = require('joi')

/**
 * string() 值必须是字符串
 * alphanum() 值只能是包含 a-zA-Z0-9 的字符串
 * min(length) 最小长度
 * max(length) 最大长度
 * required() 值是必填项，不能为 undefined
 * pattern(正则表达式) 值必须符合正则表达式的规则
 */

// 用户名的验证规则
const name = joi.string().min(3).max(12).required()
// 用户密码的验证规则
const passwd = joi.string().pattern(/^[\S]{6,12}$/).required()
// 性别验证
const sex = joi.string().pattern(/^(男|女){1}$/).required()
// 电话号码
const phone = joi.string().required()

// 用户信息修改验证
const id = joi.number().integer().min(1).required()

// 头像格式验证（base64）
const avatar = joi.string().dataUri().required()

// 定义表单验证的规则对象
exports.registerschema = {
  body: {
    name,
    passwd,
    sex,
    phone
  }
}
// 登录验证
exports.loginschema = {
  body: {
    name,
    passwd
  }
}
// 用户信息修改验证
exports.updateschma = {
  body: {
    id,
    name,
  }
}

// 密码修改
exports.pwdschema = {
  body: {
    // 使用 password 这个规则，验证 req.body.oldPwd 的值
    oldPwd: passwd,
    // 使用 joi.not(joi.ref('oldPwd')).concat(password) 规则，验证 req.body.newPwd 的值
    // 解读：
    // 1. joi.ref('oldPwd') 表示 newPwd 的值必须和 oldPwd 的值保持一致
    // 2. joi.not(joi.ref('oldPwd')) 表示 newPwd 的值不能等于 oldPwd 的值
    // 3. .concat() 用于合并 joi.not(joi.ref('oldPwd')) 和 password 这两条验证规则
    newPwd: joi.not(joi.ref('oldPwd')).concat(passwd),
  },
}
// 头像修改验证
exports.avatarschema = {
  body: {
    avatar
  }
}